package com.center.growcenterserver.config;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * CorsInterceptor 类继承自 HandlerInterceptorAdapter，用于处理跨域资源共享 (CORS)。
 * 跨域资源共享是一种安全机制，它限制了从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。
 * 通过在请求被处理之前添加适当的响应头，该拦截器允许服务器支持跨域请求。
 *
 * 主要功能：
 * - 在 HTTP 请求被处理前（preHandle 方法），向响应中添加必要的 CORS 头信息，以允许跨域请求。
 *   这些头部包括：
 *   - Access-Control-Allow-Origin: 指定了允许访问资源的外域 URI。这里动态获取请求中的 Origin 值作为允许的来源。
 *   - Access-Control-Allow-Methods: 表明服务器支持的所有跨域请求的方法，如 POST, GET, OPTIONS, DELETE。
 *   - Access-Control-Max-Age: 预检请求的有效期，单位为秒，在此期间内无需再发送预检请求。
 *   - Access-Control-Allow-Headers: 列出了本次请求中可以携带的自定义头部字段。
 *   - Access-Control-Allow-Credentials: 表示是否允许发送Cookie。默认情况下，CORS请求不会发送凭证信息。
 */

public class CorsInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x_requested_with,x-requested-with,Authorization,Content-Type,token");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        return true;
    }
}
